package com.zhouxujing.game;

import java.awt.Graphics;
import java.awt.Image;

//boss类与普通敌机类不同，出现次数相对较少，血量厚，不会被我方打一次就死，且子弹样式多伤害高，我方战机中一次扣两滴血
public class BossPlane extends GameObject implements Runnable{
	//这个为地方飞机移动的角度取值范围，不要超过180度
	private double degree=(Math.random()*(Math.PI/2)+Math.PI/4);
	private boolean live=true;
	private boolean iscollide=false;//是否碰撞
	public static int step = Plane.step;//boss移动速度比普通敌机快
	public static int count = 30;//BOOS血条
	public static int attackspeed = Constant.ATTACKSPEED;//攻击速度
	
	/*
	 *创建2个爆炸类
	 */
	Explode explode1=new Explode();
	Explode explode2=new Explode();
	boolean ex1=false;
	boolean ex2=false;
	Bullet bullets[];
	private int bulletcount=Constant.DEFAULT_ARMY_BC;
	
	//设置敌机的子弹数，敌机出现的位置，
	public BossPlane(Image img,double x,double y,int bulletcount,int step){
		setImg(img);//初始化参数
		this.bulletcount=bulletcount;
		this.step=step;
		bullets=new Bullet[bulletcount];
		//给子弹数组里的每一个对象赋值一个子弹对象
		for(int i=0;i<bullets.length;i++){
			bullets[i]=new BossBullet();
		}
		//敌机boss出现的位置由创建对象时传入的值决定
		setPosition(x, y);
		setWidth(getImg().getWidth(null));//设置飞机大小从图片中获取
		setHeight(getImg().getHeight(null));
	}
	//绘制自身，绘制自身爆炸，检查自身位置
	public void drawSelf(Graphics g) {
		
		if(live){
			g.drawImage(getImg(),(int)getX(),(int)getY(), null);
			move();
		}
		if(iscollide){
			exp_anim(g);
		}
		checkLocation();
		
	}
	
	public boolean isLive() {
		return live;
	}
	public void setLive(boolean live) {
		this.live = live;
	}
	public void setCollide(boolean collide){
		this.iscollide=collide;
	}
	public void setBulletCount(int bulletcount){
		this.bulletcount=bulletcount;
	}
	public void exp_anim(Graphics g){//爆炸方法，当iscollide和ex值都为TRUE时，boss爆炸
		if(iscollide&&ex1){
			explode1.draw(g);
		}
		if(iscollide&&ex2){
			explode2.draw(g);
		}
		if(explode1.count>=15){//停止绘制爆炸动图
			ex1=false;
			explode1.count=0;
		}
		if(explode2.count>=15){
			ex2=false;
			explode2.count=0;
		}
		if(!ex1&&!ex2){
			iscollide=false;
		}
	}
	/**
	 * 
	 */
	public void checkLocation(){
		if(!live||getY()>Constant.GAME_HEIGHT){
			setPosition(Math.random()*650, 5);//设置新的的boss复活位置，同时将live的值赋值为TRUE
			degree=(Math.random()*(Math.PI/2)+Math.PI/4);//boss移动的范围
			live=true;
		}
		if(getX()>Constant.GAME_WIDTH-226){
			moveX(Constant.GAME_WIDTH-226);
			degree=Math.PI-degree;//撞墙后，degree赋值为45度
		}
		if(getX()<5) {
			moveX(5);
			degree=Math.PI-degree;
		}
	}
	/**
	 * 移动战机位置
	 */
	public void move(){
		move(getX()+step*Math.cos(degree),
				getY());
	}
	/**
	 * 发射子弹
	 */
	public void fire(){
	//每辆敌机发射子弹的概率
		if(live&&(Math.random()<Constant.random)){
			 for(int i=0;i<bullets.length;i++){
				 //System.out.println("已调用boss fire方法");
					if(!bullets[i].isLive()){//当子弹消失在窗口时，设置敌机新的子弹出现的坐标
						bullets[i].setPosition(getX()+80, getY()+75);//子弹出现在战机的位置
						bullets[i].setLive(true);//在将子弹数组内每个对象的live设置为TRUE
						break;
					}
				}
		 }
	}
	public void run() {
		while(true){
			fire();
			try{
				Thread.sleep(attackspeed);//发射子弹间隔的秒速
			}catch(InterruptedException e){
				e.printStackTrace();
			}
		}
	}
	
}
